﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using PMQLCHH.BUS;
using PMQLCHH.DAO;

namespace PMQLCHH.GUI
{
    public partial class DANHSACHPHIEUTRA : DevComponents.DotNetBar.Office2007Form
    {
        //Đã sửa lại từ Hưng và hòan thành-Lâm Chương Trường Thịnh
        string str_MaPT;
        public DANHSACHPHIEUTRA()
        {
            InitializeComponent();
            //TẠO RA TABLE LƯU CÁC THÀNH PHẦN CỦA TRẠNG THÁI
            DataTable dt = new DataTable();
            dt.Columns.Add("Text");
            dt.Columns.Add("Value");

            //them gia tri
            DataRow newCustomersRow = dt.NewRow();
            newCustomersRow["Text"] = "Tất Cả";
            newCustomersRow["Value"] = 2;
            dt.Rows.Add(newCustomersRow);

            newCustomersRow = dt.NewRow();
            newCustomersRow["Text"] = "Chưa Duyệt";
            newCustomersRow["Value"] = 0;
            dt.Rows.Add(newCustomersRow);

            newCustomersRow = dt.NewRow();
            newCustomersRow["Text"] = "Đã Duyệt";
            newCustomersRow["Value"] = 1;
            dt.Rows.Add(newCustomersRow);
            //ĐỔ TABLE VÀO COMBOBOX TRẠNG THÁI
            cbx_TrangThai.DataSource = dt;
            cbx_TrangThai.ValueMember = "Value";
            cbx_TrangThai.DisplayMember = "Text";
            cbx_TrangThai.SelectedValue = 2;
            //Load ds phiếu gửi
            dtg_DanhSachPhieuTra.DataSource = GoiHangBUS.LoadDSPhieuGoi();
            //tạo biến lưu mã phiếu gửi
            str_MaPT = "";
            //tạo ngày
            dtp_NgayLapDen.Format = DateTimePickerFormat.Custom;
            dtp_NgayLapDen.CustomFormat = "dd/MM/yyyy";
            dtp_NgayLapDen.Value = DateTime.Now;
            dtp_NgayLapTu.Format = DateTimePickerFormat.Custom;
            dtp_NgayLapTu.CustomFormat = "dd/MM/yyyy";
           // dtp_NgayLapTu.Value = DateTime.Parse(GoiHangBUS.LayNgayLapPhieuTraCuNhat());
        }

        private void dtg_ChiTietPhieuTra_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void btn_LamMoi_Click(object sender, EventArgs e)
        {
            txt_MaPhieuTra.Text = "";
            cbx_TrangThai.SelectedValue = 2;
            gp_ChiTietPhieuTra.Visible = false;
            dtg_DanhSachPhieuTra.DataSource = GoiHangBUS.LoadDSPhieuGoi();
            str_MaPT = "";
            dtp_NgayLapDen.Format = DateTimePickerFormat.Custom;
            dtp_NgayLapDen.CustomFormat = "dd/MM/yyyy";
            dtp_NgayLapDen.Value = DateTime.Now;
            dtp_NgayLapTu.Format = DateTimePickerFormat.Custom;
            dtp_NgayLapTu.CustomFormat = "dd/MM/yyyy";
            dtp_NgayLapTu.Value = DateTime.Parse(GoiHangBUS.LayNgayLapPhieuTraCuNhat());
        }


        public void Export(DataTable dt, string sheetName, string title)
        {

            //Tạo các đối tượng Excel
            Microsoft.Office.Interop.Excel.Application oExcel = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbooks oBooks;
            Microsoft.Office.Interop.Excel.Sheets oSheets;
            Microsoft.Office.Interop.Excel.Workbook oBook;
            Microsoft.Office.Interop.Excel.Worksheet oSheet;

            //Tạo mới một Excel WorkBook
            oExcel.Visible = true;
            oExcel.DisplayAlerts = false;
            oExcel.Application.SheetsInNewWorkbook = 1;
            oBooks = oExcel.Workbooks;

            oBook = (Microsoft.Office.Interop.Excel.Workbook)(oExcel.Workbooks.Add(Type.Missing));
            oSheets = oBook.Worksheets;
            oSheet = (Microsoft.Office.Interop.Excel.Worksheet)oSheets.get_Item(1);
            oSheet.Name = sheetName;

            // Tạo phần đầu nếu muốn
            Microsoft.Office.Interop.Excel.Range head = oSheet.get_Range("A1", "F1");
            head.MergeCells = true;
            head.Value2 = title;
            head.Font.Bold = true;
            head.Font.Name = "Tahoma";
            head.Font.Size = "18";
            head.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;

            // Tạo tiêu đề cột
            Microsoft.Office.Interop.Excel.Range cl1 = oSheet.get_Range("A3", "A3");
            cl1.Value2 = "Mã Phiếu Gửi";
            cl1.ColumnWidth = 13.5;

            Microsoft.Office.Interop.Excel.Range cl2 = oSheet.get_Range("B3", "B3");
            cl2.Value2 = "Tên Nhà Cung Cấp";
            cl2.ColumnWidth = 22.0;

            Microsoft.Office.Interop.Excel.Range cl3 = oSheet.get_Range("C3", "C3");
            cl3.Value2 = "Số Điện Thoại";
            cl3.ColumnWidth = 22.0;

            Microsoft.Office.Interop.Excel.Range cl4 = oSheet.get_Range("D3", "D3");
            cl4.Value2 = "Ngày Lập";
            cl4.ColumnWidth = 25.0;

            Microsoft.Office.Interop.Excel.Range cl5 = oSheet.get_Range("E3", "E3");
            cl5.Value2 = "Tổng Số Lượng Trả";
            cl5.ColumnWidth = 25.0;

            Microsoft.Office.Interop.Excel.Range cl6 = oSheet.get_Range("F3", "F3");
            cl6.Value2 = "Trạng Thái";
            cl6.ColumnWidth = 25.0;

            Microsoft.Office.Interop.Excel.Range rowHead = oSheet.get_Range("A3", "F3");
            rowHead.Font.Bold = true;
            // Kẻ viền
            rowHead.Borders.LineStyle = Microsoft.Office.Interop.Excel.Constants.xlSolid;
            // Thiết lập màu nền
            rowHead.Interior.ColorIndex = 15;
            rowHead.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;


            // Tạo mẳng đối tượng để lưu dữ toàn bồ dữ liệu trong DataTable,
            // vì dữ liệu được được gán vào các Cell trong Excel phải thông qua object thuần.
            object[,] arr = new object[dt.Rows.Count, dt.Columns.Count];

            //Chuyển dữ liệu từ DataTable vào mảng đối tượng
            for (int r = 0; r < dt.Rows.Count; r++)
            {
                DataRow dr = dt.Rows[r];
                for (int c = 0; c < dt.Columns.Count; c++)
                {
                    arr[r, c] = dr[c].ToString();
                }
            }

            //Thiết lập vùng điền dữ liệu
            int rowStart = 4;
            int columnStart = 1;

            int rowEnd = rowStart + dt.Rows.Count - 1;
            int columnEnd = dt.Columns.Count;

            // Ô bắt đầu điền dữ liệu
            Microsoft.Office.Interop.Excel.Range c1 = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[rowStart, columnStart];
            // Ô kết thúc điền dữ liệu
            Microsoft.Office.Interop.Excel.Range c2 = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[rowEnd, columnEnd];
            // Lấy về vùng điền dữ liệu
            Microsoft.Office.Interop.Excel.Range range = oSheet.get_Range(c1, c2);

            //Điền dữ liệu vào vùng đã thiết lập
            range.Value2 = arr;

            // Kẻ viền
            range.Borders.LineStyle = Microsoft.Office.Interop.Excel.Constants.xlSolid;
            // Căn giữa cột STT
            Microsoft.Office.Interop.Excel.Range c3 = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[rowEnd, columnStart];
            Microsoft.Office.Interop.Excel.Range c4 = oSheet.get_Range(c1, c3);
            oSheet.get_Range(c3, c4).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
        }

        private void btn_LocPhieuTra_Click(object sender, EventArgs e)
        {
            string MaPT = "";
            int TrangThai = 2;
            string NgayLapTu = "";
            string NgayLapDen = "";
            MaPT = txt_MaPhieuTra.Text;
            TrangThai = int.Parse(cbx_TrangThai.SelectedValue.ToString());
            NgayLapTu = dtp_NgayLapTu.Value.Year + "/" + dtp_NgayLapTu.Value.Month + "/" + dtp_NgayLapTu.Value.Day;
            NgayLapDen = dtp_NgayLapDen.Value.Year + "/" + dtp_NgayLapDen.Value.Month + "/" + dtp_NgayLapDen.Value.Day;
            dtg_DanhSachPhieuTra.DataSource = GoiHangBUS.LocPhieuTra(MaPT, NgayLapTu, NgayLapDen, TrangThai);
            gp_ChiTietPhieuTra.Visible = false;
        }

        private void btn_XuatDuLieu_Click(object sender, EventArgs e)
        {
            DataTable dt = (DataTable)dtg_DanhSachPhieuTra.DataSource;

            Export(dt, "Danh sach phieu tra hang", "DANH SÁCH CÁC PHIẾU GỞI HÀNG");
        }

        private void btn_Thoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btn_XoaTatCa_Click(object sender, EventArgs e)
        {
            //kiểm tra xem có phiếu gỞI khog
            //nếu có đi xuống else
            if (dtg_DanhSachPhieuTra.Rows.Count == 0)
            {
                MessageBox.Show("Không có phiếu nhập");
                gp_ChiTietPhieuTra.Visible = false;
            }
            else
            {
                GoiHangBUS.XoaTatCaCTPT();
                GoiHangBUS.XoaTatCaPT();
                //load lại danh sách phiếu gửi
                dtg_DanhSachPhieuTra.DataSource = GoiHangBUS.LoadDSPhieuGoi();
                //ẩn chi tiết phiếu gửi
                gp_ChiTietPhieuTra.Visible = false;
            }

            
        }

        private void btn_Xoa_Click(object sender, EventArgs e)
        {
            //xóa phiếu gửi được đánh check
            //chỉ xóa các phiếu chưa duyệt
            for (int i = dtg_DanhSachPhieuTra.Rows.Count - 1; i >= 0; i--)
            {
                if (dtg_DanhSachPhieuTra.Rows[i].Cells[0].Value != null)
                {
                    if (dtg_DanhSachPhieuTra.Rows[i].Cells[0].Value.ToString() == "Y")
                    {
                        if (dtg_DanhSachPhieuTra.Rows[i].Cells[6].Value.ToString() == "Chưa Duyệt")
                        {
                            PhieuGoiHangDTO pg = new PhieuGoiHangDTO();
                            pg.MaPhieuGoi = dtg_DanhSachPhieuTra.Rows[i].Cells[1].Value.ToString();
                            GoiHangBUS.XoaCTPTTheoMaPT(pg);
                            GoiHangBUS.XoaPTTheoMaPT(pg);
                        }
                    }
                }
            }
            dtg_DanhSachPhieuTra.DataSource = GoiHangBUS.LoadDSPhieuGoi();
            gp_ChiTietPhieuTra.Visible = false;
        }

        private void dtg_DanhSachPhieuTra_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int d = e.RowIndex;
            //kiểm tra dòng được chọn không phải là tiêu đề
            if (d >= 0)
            {
                //nếu phiếu gử chưa duyệt thì hiện nút cập nhật trạng thái
                //ngược lại ẩn đi
                if (dtg_DanhSachPhieuTra.Rows[d].Cells[6].Value.ToString() == "Chưa Duyệt")
                {
                    btn_CapNhatTrangThai.Visible = true;
                }
                else
                    btn_CapNhatTrangThai.Visible = false;
                //dtg_ChiTietPhieuTra.Visible = true;
                PhieuGoiHangDTO pgh = new PhieuGoiHangDTO();
                pgh.MaPhieuGoi = dtg_DanhSachPhieuTra.Rows[d].Cells[1].Value.ToString();
                //gán str_MaPT=mã phiếu gửi của phiếu gửi được chọn
                str_MaPT = dtg_DanhSachPhieuTra.Rows[d].Cells[1].Value.ToString();
                //load chi tiết phiếu gửi theo mã phiếu gửi
                dtg_ChiTietPhieuTra.DataSource = GoiHangBUS.LoadCTPTTheoMPT(pgh);
                //hiện datagridview chi tiết phiếu gửi
                gp_ChiTietPhieuTra.Visible = true;
            }
        }

        private void dtg_DanhSachPhieuTra_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void btn_CapNhatTrangThai_Click(object sender, EventArgs e)
        {
            PhieuGoiHangDTO pg = new PhieuGoiHangDTO();
            //phiếu gửi sẽ lấy giá trị mã phiếu gửi =str_MaPT
            pg.MaPhieuGoi = str_MaPT;
            //cập nhật trạng thái phiếu gửi và tất cả các dòng trong chi tiết phiếu gửi 
            //liên quan phiếu gửi này là đã duyệt
            GoiHangBUS.CapNhatTrangThaiPG(pg);
            GoiHangBUS.CapNhatTrangThaiCTPG(pg);
            //duyệt vòng for trong datagridview chi tiết phiếu gửi
            for (int i = 0; i < dtg_ChiTietPhieuTra.Rows.Count; i++)
            {
                ChiTietPhieuGoiHangDTO ctpg = new ChiTietPhieuGoiHangDTO();
                ctpg.MaMatHang = dtg_ChiTietPhieuTra.Rows[i].Cells[0].Value.ToString();
                ctpg.SoLuong = int.Parse(dtg_ChiTietPhieuTra.Rows[i].Cells[4].Value.ToString());
                //cập nhật số lượng trong table mặt hàng
                GoiHangBUS.UpDateTableMatHang(ctpg);
            }
            MessageBox.Show("Đã cập nhật thành đã duyệt");
            dtg_DanhSachPhieuTra.DataSource = GoiHangBUS.LoadDSPhieuGoi();
            gp_ChiTietPhieuTra.Visible = false;
        }

        private void btn_ThemPhieuNhap_Click(object sender, EventArgs e)
        {
            TRAHANG frm_TraHang = new TRAHANG();
            frm_TraHang.ShowDialog();
            this.Close();
        }

        
    }
}